﻿using System;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.ServiceModel.Activation;
using System.Collections.Generic;
using System.Web;

using Model;

namespace OpenLeuvenPortaal
{
    [ServiceContract(Namespace = "")]

    [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
    public class Authentication
    {
        [OperationContract]
        public bool AuthUser(Gebruiker gbr)
        {
            dbopenleuvenDataContext db = new dbopenleuvenDataContext();
            var result = from g in db.Gebruikers where g.Gebruikersnaam == gbr.Gebruikersnaam select g;
            
            List<Gebruiker> Authuser = result.ToList();
            if (Authuser.Count == 1)
            {
                return true;
            }
            else return false;
        }

        [OperationContract]
        public bool AddNewUser(Gebruiker gbr)
        {
            dbopenleuvenDataContext db = new dbopenleuvenDataContext();
            var result = from g in db.Gebruikers where g.Gebruikersnaam == gbr.Gebruikersnaam select g;
            List<Gebruiker> Adduser = result.ToList();
            if (Adduser.Count == 0)
            {
                db.Gebruikers.InsertOnSubmit(gbr);
                db.SubmitChanges();
                return true;
            }
            else return false;
        }

        [OperationContract]
        public bool RemoveUser(Gebruiker gbr)
        {
            dbopenleuvenDataContext db = new dbopenleuvenDataContext();
            var result = from g in db.Gebruikers where g.Gebruikersnaam == gbr.Gebruikersnaam select g;
            List<Gebruiker> Removeuser = result.ToList();
            if (Removeuser.Count != 0)
            {
                db.Gebruikers.DeleteOnSubmit(Removeuser[0]);
                db.SubmitChanges();
                return true;
            }
            else return false;
        }

        [OperationContract]
        public bool UpdateUser(Gebruiker gbr)
        {
            dbopenleuvenDataContext db = new dbopenleuvenDataContext();
            var result = from g in db.Gebruikers where g.Gebruikersnaam == gbr.Gebruikersnaam select g;
            List<Gebruiker> Updateuser = result.ToList();
            if (Updateuser.Count != 0)
            {
                Updateuser[0].Naam = gbr.Naam;
                Updateuser[0].Voornaam = gbr.Voornaam;
                Updateuser[0].Adres = gbr.Adres;
                Updateuser[0].Postcode = gbr.Postcode;
                Updateuser[0].Gemeente = gbr.Gemeente;
                Updateuser[0].Email = gbr.Email;
                Updateuser[0].Paswoord = gbr.Paswoord;

                
                db.SubmitChanges();
                
                return true;
            }
            else return false;
        }

        [OperationContract]
        public List<Gebruiker> SelectAllUsers()
        {
            dbopenleuvenDataContext db = new dbopenleuvenDataContext();
            var result = from g in db.Gebruikers select g;
            List<Gebruiker> Allusers = result.ToList();
            return Allusers;
        }

        [OperationContract]
        public bool CheckLogin(string username, string password)
        {
            if (username != String.Empty && password != String.Empty)
            {
                dbopenleuvenDataContext db = new dbopenleuvenDataContext();
                var result = from gbr in db.Gebruikers where gbr.Gebruikersnaam == username select gbr;
                List<Gebruiker> mijnusers = result.ToList();
                try
                {
                    if (mijnusers[0].Paswoord == password)
                    {
                        return true;
                    }
                }
                catch
                {
                    return false;
                }
            }
            return false;
        }

        
        [OperationContract]
        public Gebruiker Getuser(string username)
        {
            dbopenleuvenDataContext db = new dbopenleuvenDataContext();
            var result = from u in db.Gebruikers where u.Gebruikersnaam == username select u;
            List<Gebruiker> mijnusers = result.ToList();
            return mijnusers[0];
        }

        [OperationContract]
        public bool LoginCheck(string username, int gbrID)
        {
            dbopenleuvenDataContext db = new dbopenleuvenDataContext();
            var result = from gbr in db.Gebruikers where gbr.Gebruikersnaam == username select gbr;
            List<Gebruiker> usercheck = result.ToList();
            if (usercheck.Count != 0)
            {
                if (usercheck[0].Gebruikersnaam != username || usercheck[0].UserID != gbrID)
                {
                    return false;
                }
                else return true;
            }
            return false;
        }

        [OperationContract]
        public bool BedrijfRegister(Bedrijven bedr)
        {
            dbopenleuvenDataContext db = new dbopenleuvenDataContext();
            var result = from b in db.Bedrijvens where b.Bedrijfsnaam == bedr.Bedrijfsnaam select b;
            List<Bedrijven> bedrijfcheck = result.ToList();
            if (bedrijfcheck.Count == 0)
            {
                db.Bedrijvens.InsertOnSubmit(bedr);
                db.SubmitChanges();
                return true;
            }
            return false;
        }
        // Add more operations here and mark them with [OperationContract]
    }
}
